package eva.savant.business.contabilidad.view

import eva.savant.business.contabilidad.service.TSContabilidad
import eva.savant.businessobject.cg.Ejercicio
import eva.savant.businessobject.cg.Periodo
import eva.savant.core.view.Bean

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct
import org.primefaces.event.SelectEvent

@SessionScoped
@ManagedBean(name = 'IMEjercicio')
public class IMEjercicio extends Bean {

  Periodo periodo

  @PostConstruct
  public void cleanEntity() {

    def date= new Date()

    entity= new Ejercicio(); init()

    entity.codigo= date.format('yy')

    entity.nombre= date.format('yyyy')

    entity.lsPeriodo= new ArrayList<Periodo>()


    periodo= new Periodo()

    periodo.inicio= date

    periodo.fin= date

    periodo.codigo= date.format('MM')

    periodo.nombre= date.format('MMMM').toUpperCase()

    periodo.estado= ALTA
  }

  public void dateSel() {

    periodo.codigo= periodo.inicio.format('MM')

    periodo.nombre= periodo.inicio.format('MMMM').toUpperCase()
  }

  public List findLsEntity() {

    return find(Ejercicio,'order by codigo desc')
  }

  public void editEntity(Object id) {

    entity= get(Ejercicio, id)

    entity.lsPeriodo= find(Periodo,'ejercicio.id=? order by codigo',entity.id)
  }

  public void detailAdd() {

    def p= new Periodo()

    p.codigo = entity.codigo + periodo.codigo

    p.nombre = periodo.nombre

    p.inicio = periodo.inicio

    p.fin    = periodo.fin

    p.estado = periodo.estado


    def nuevo= true; for(int i=0; i < entity.lsPeriodo.size(); i++) { def x= entity.lsPeriodo.get(i)

    if(x.codigo == p.codigo) { entity.lsPeriodo.set(i,p); nuevo= false; break }  }

    if(nuevo) entity.lsPeriodo.add p


    periodo= new Periodo()

    periodo.inicio= new Date()

    periodo.fin= new Date()

    periodo.estado= ALTA
  }

  public void detailEdit(SelectEvent event) {

    if(isRead) return

    def p= (Periodo) event.object

    periodo        = new Periodo()

    periodo.codigo = p.codigo[2..3]

    periodo.nombre = p.nombre

    periodo.inicio = p.inicio

    periodo.fin    = p.fin

    periodo.estado = p.estado
  }

  public void detailDelete(Periodo periodo) {

    if(isRead) return

    for(int i=0; i < entity.lsPeriodo.size(); i++) { def p= entity.lsPeriodo.get(i)

    if(p.codigo == periodo.codigo) { entity.lsPeriodo.remove(i); break }  }
  }

  public boolean mergeEntity(Object entity) { alta((Ejercicio)entity); entity= (Ejercicio) entity

    if(entity.lsPeriodo?.size() < 1) { addErrorMessage 'El detalle de periodos esta vacio'; return false }

    def tsContabilidad= (TSContabilidad) getSpringBean('tsContabilidad')

    return tsContabilidad.mergeEjercicio(entity)
  }

}
